import { LocationInfo } from "./LocationInfo";
import { NbInfo } from "./NbInfo";
import { ByteUtils } from "../utils/ByteUtils";
let byteUtils = new ByteUtils();

class Device {
    uuid	//String	App对设备的唯一标识	考虑uuid使用sn生成，sn大小为16Byte
    sn	//String	设备唯一标识	
    name	//String	设备名称	注册时，App根据产品型号生成一个默认名称，然后让客户修改，功能同原有的站点名称
    clazz = 3	//Int	设备类	1.无源锁，2.电子钥匙，3.门锁，4.机柜锁，5.挂锁，6.控制器
    typeCode	//Int	设备类型编码	需要根据设备类型的不同去区分不同设备（判断其支持的功能）
    access = 0	//int 设备开关鉴权能力 0：蓝牙被动开锁；1：指纹；2：密码；3：刷卡；4：NB（蜂窝无线）；5：蓝牙主动开锁；6：电子钥匙；
    monitor = 0 //int 设备监测能力 0：电压，1：蜂窝无线(RSRP+SNR等),2：温度，3：湿度，4：水浸，5：烟感，6：陀螺仪7：GPS',
    control = 0 //int	设备控制能力 	预留
    electricity	//String	电量信息	以V作为单位，然后根据不同类型的算法来算百分比
    hardwareVersion	//String	硬件版本	
    softwareVersion	//String	软件版本	
    operateKey	//String	设备秘钥	设备注册时由设备随机产生设备秘钥，用于蓝牙/NB开锁时加密校验
    bleName	//String	设备的蓝牙名称	必传
    bleMac	//String	设备的蓝牙Mac地址	必传（可作为唯一标识）
    verifyDelTrans = 2	//1	删除转让设备是否需要短信验证	1：需要 2：不需要
    company = ""	// String	设备厂家信息 	预留备用于平台接入第三方设备或识别OEM客户
    // 设备类型	类型字符串	类型编码
    // 蓝牙门锁	BT-DoorLock	01
    // 蓝牙挂锁(含U型锁)	BT-PadLock	02
    // 蓝牙柜锁	BT-CabinetLock	03
    // NB联网门锁	NB-DoorLock	04
    // NB联网挂锁(含U型锁)	NB-PadLock	05
    // NB联网柜锁	NB-CabinetLock	06

    /**
     * 下面内容为类类型
     * Object
     */
    locationInfo = new LocationInfo(); //设备定位信息
    nbInfo = new NbInfo();      //NB信息

    /**
     * 获取测试数据
     */
    static getTestDevice1() {
        let newDevice = new Device();
        newDevice.uuid = null;
        newDevice.sn = byteUtils.randomUUID();
        newDevice.name = "假设备" + Math.round((Math.random() * 10));
        newDevice.typeCode = 0x0301;
        newDevice.type = "BT-DoorLock";
        newDevice.access = 0x03;
        newDevice.electricity = 4.01;
        newDevice.hardwareVersion = "1.2.1.2";
        newDevice.softwareVersion = "1.0.0.0";
        newDevice.operateKey = "00000000-0000-0000-C000-000000000046";
        newDevice.bleName = (Math.random() * 10) > 5 ? "SEL-ANSI-1851" : "SFL-EURO-1851";
        newDevice.bleMac = byteUtils.getRandomAsciiStr(12);
        newDevice.verifyDelTrans = 2;
        newDevice.locationInfo.writeTestData();
        newDevice.nbInfo = null;
        return newDevice;
    }

    static getTestDevice2() {
        let newDevice = new Device();
        newDevice.uuid = null;
        newDevice.sn = byteUtils.randomUUID();
        newDevice.name = "假设备" + Math.round((Math.random() * 10));
        newDevice.typeCode = 0x0501;
        newDevice.type = "BT-DoorLock";
        newDevice.access = 0x03;
        newDevice.electricity = 3.79;
        newDevice.hardwareVersion = "1.2.1.2";
        newDevice.softwareVersion = "1.0.0.0";
        newDevice.operateKey = "00000000-0000-0000-C000-000000000064";
        newDevice.bleName = "PLK343A";
        newDevice.bleMac = byteUtils.getRandomAsciiStr(12);
        newDevice.verifyDelTrans = 2;
        newDevice.locationInfo.writeTestData();
        newDevice.nbInfo = null;
        return newDevice;
    }
}

export {
    Device
}